package com.dc.refactoring._3_重新组织数据._3_ChangeValueToReference.oldObject;

import java.util.List;

/**
 * Description: 将值对象改为引用对象_订单类
 * @author: gdc
 * @date: 2020/11/16
 * @version 1.0
 */
public class Order {

    /**
     * 当前的 Customer 对象还是值对象。
     * 就算多份订单属于同一客户，但是每个Order对象还是拥有各自的Customer对象。
     * 现在要改变这个现状，使得一旦同一个客户拥有多份不同的订单，代表这些订单的所有Order对象就同时共享一个Customer对象。
     * 也就意味着：每一个客户名称只该对应一个Customer对象
     */
    private Customer customer;

    public Order(String customerName) {
        this.customer = new Customer(customerName);
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(String customerName) {
        this.customer = new Customer(customerName);
    }

    public String getCustomerName() {
        return customer.getName();
    }

    private static int numberOfOrderFor(List<Order> orders, String customer) {
        return (int) orders.stream().filter(order -> order.getCustomerName().equals(customer)).count();
    }
}
